﻿using System;
using System.Collections.Generic;



namespace INSTA.Exercices.Comparable
{
    /// <summary>
    /// Classe permettant de spécifier par quelle propriété
    /// on veut effectuer la comparaison.
    /// On accèdera à la valeur de la propriété via la réflexion.
    /// </summary>
    /// <typeparam name="T">Le type d'éléments à comparer.</typeparam>
    public class GenericPersonComparer : IComparer<Person>
    {

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="propertyName">Name of the property.</param>
        public GenericPersonComparer(string propertyName)
        {
            PropertyName = propertyName;
        }

       
        public int Compare(Person x, Person y)
        {
            // On veut récupérer la valeur de "x.PropertyName"
            Type typeX  = typeof (Person);
            var resultX = typeX.GetPropertyValue(PropertyName);

            // On veut récupérer la valeur de "y.PropertyName"
            Type typeY  = typeof(Person);
            var resultY = typeY.GetPropertyValue(PropertyName);

            int result = resultX.ToString().CompareTo(resultY.ToString());

            return result;

        }

        /// <summary>
        /// Nom de la propriété par laquelle effectuer 
        /// la comparaison.
        /// </summary>
        public string PropertyName { get; private set; }
    }
}
